package common

import (
	"counter-help/admin/server/global"
	"counter-help/admin/server/model/common/response"
	"github.com/gin-gonic/gin"
	"go.uber.org/zap"
	"path/filepath"
	"strings"
)

// FileApi 处理文件访问请求
type FileApi struct{}

// ServeFile 提供统一的文件访问接口
func (fc *FileApi) ServeFile(c *gin.Context) {
	// 从请求路径中获取文件路径
	filePath := c.Param("filePath")

	// 安全检查，确保只访问包含 "static" 目录的路径
	if !strings.HasPrefix(filePath, "static/") {
		global.GVA_LOG.Warn("非法文件访问", zap.String("path", filePath))
		response.FailWithMessage("非法文件路径", c)
		return
	}

	// 检查文件是否存在
	fullPath, _ := filepath.Abs(filePath)
	if _, err := filepath.Abs(fullPath); err != nil {
		response.FailWithMessage("文件不存在", c)
		return
	}

	// 提供文件访问
	c.File(fullPath)
}
